package com.xiangxiao.rpan.storage.service;

import com.xiangxiao.rpan.storage.entity.FilterConfig;

import java.util.List;

/**
 * @auther xiangxiao
 * @email 573768011@qq.com
 * @data 2023/11/16 20:28
 */
public interface FilterConfigService {

  /**
   * 根据存储源 ID 获取存储源配置列表
   * @param   storageId
   *          存储源 ID
   * @return  存储源过滤规则配置列表
   */
  List<FilterConfig> findByStorageId(Integer storageId);

  /**
   * 根据存储源 ID 删除过滤器配置
   * @param   storageId
   *          存储源 ID
   * @return  删除条数
   */
  int deleteByStorageId(Integer storageId);

  /**
   * 批量保存存储源过滤规则配置, 会先删除之前的所有配置(在事务中运行)
   * @param   storageId
   *          存储源 ID
   * @param   filterConfigList
   *          存储源过滤规则配置列表
   */
  void batchSave(Integer storageId, List<FilterConfig> filterConfigList);

  /**
   * 指定存储源下的文件名称, 根据过滤表达式判断是否会显示, 如果符合任意一条表达式, 表示隐藏则返回 true, 反之表示不隐藏则返回 false.
   * @param   storageId
   *          存储源 ID
   * @param   fileName
   *          文件名
   * @return  是否是隐藏文件夹
   */
  boolean checkFileIsHidden(Integer storageId, String fileName);

  /**
   * 判断访问的路径是否是不允许访问的
   * @param   storageId
   *          存储源 ID
   * @param   path
   *          请求路径
   */
  boolean checkFileIsInaccessible(Integer storageId, String path);


  /**
   * 获取所有类型为禁止访问的过滤规则
   * @param   storageId
   *          存储 ID
   * @return  禁止访问的过滤规则列表
   */
  List<FilterConfig> findByStorageIdAndInaccessible(Integer storageId);
}
